/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor. 
 */
package Persistencia;

import Negocio.Anuncio;
import Negocio.Archivo;
import Negocio.Comentario;
import Negocio.Foto;
import Negocio.Ruta;
import Negocio.Usuario;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.GregorianCalendar;


/**
 *
 * @author JAVA
 */
public class PAnuncio {

    public static void crearAnuncioBD(Anuncio a) {

        Connection con = null;
        Statement st = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection(PDatos.baseDatos, PDatos.usuario, PDatos.password);
            st = con.createStatement();
            
                Date date = new Date();
                SimpleDateFormat dtf = new SimpleDateFormat("yyyy-MM-dd H:mm:ss");
                String prueba = dtf.format(date);
                
                st.executeUpdate("INSERT INTO anuncios (idCreador,descripcion,fecha,rutaFoto,precio,producto)"
                        + "VALUES (" + a.getIdCreador() + ",'" + a.getDescripcion() + "','" + prueba + "','" + a.getRutaFotoAnuncio() + "','" + a.getPrecio() + "','" + a.getProducto() + "')");

                //para que coja el id una vez creado en la base de datos                
                rs = st.executeQuery("SELECT idAnuncio FROM anuncios ORDER BY idAnuncio DESC");

                if (rs.next()) {
                    a.setIdAnuncio(rs.getInt("idAnuncio"));
                }
            
            //inserta Ruta
           
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                st.close();
                con.close();
            } catch (SQLException sqlex) {
                System.out.println(sqlex.getMessage());
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
    }

    public static void actualizarAnuncioBD(Anuncio a){
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection(PDatos.baseDatos, PDatos.usuario, PDatos.password);
            st = con.createStatement();
            
            //MAMONEO DE LAS HORAS DE LOS COJONES
            Date fecha = new Date();

            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd H:mm:ss");    
            String fechaSubida = dateFormat.format(fecha);
            //consulta para modificar foto            
            
              String SQL = "UPDATE anuncios "
                    + "SET idCreador = " + a.getIdCreador()
                    + ", descripcion = '" + a.getDescripcion()
                    + "', fecha = '" + fechaSubida
                    + "', rutaFoto = '" + a.getRutaFotoAnuncio()   
                    + "', precio = " + a.getPrecio()
                    + " WHERE idAnuncio = "+a.getIdAnuncio();

            st.executeUpdate(SQL);
              
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                st.close();
                con.close();
            } catch (SQLException sqlex) {
                System.out.println(sqlex.getMessage());
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
    }

    public static List<Anuncio> mostrarAnunciosBD() {
        List<Anuncio> anuncios = new ArrayList();

        Connection con = null;
        Statement st = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection(PDatos.baseDatos, PDatos.usuario, PDatos.password);
            st = con.createStatement();


            //aqui comprueba que lo que le llega es una foto o una ruta
            
                rs = st.executeQuery("Select idAnuncio,idCreador,descripcion,fecha,rutaFoto,precio,producto FROM anuncios ");

                while (rs.next()) {                    
                    Anuncio a = new Anuncio(rs.getInt("idAnuncio"), rs.getInt("idCreador"), rs.getString("descripcion"), rs.getString("rutaFoto"), rs.getString("producto"), rs.getDouble("precio"), rs.getDate("fecha"));                    
                    anuncios.add(a);
                }
                
                int j;
                int i;
            //con esto ya ordena la lista por fecha y hora y asi tengo las actualizaciones mas rcientes
            //todavia no he hecho que solo coja 15 porque no tengo tantos archivos XD , pero se puede 
            //usar el metodo archivos.subList(tam, tam) para cogerla por indice (creo) 
            
            for(i=0;i<anuncios.size();i++){
                for(j=i+1;j<anuncios.size();j++){
                
                    if(anuncios.get(i).getFecha().compareTo(anuncios.get(j).getFecha())<0){                        
                        Anuncio a = anuncios.get(i);
                        anuncios.set(i, anuncios.get(j));
                        anuncios.set(j, a);

                    }
                } 
            }
           

            

        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                rs.close();
                st.close();
                con.close();
            } catch (SQLException sqlex) {
                System.out.println(sqlex.getMessage());
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
        return anuncios;
        
    }
    
    public static List<Anuncio> mostrarAnunciosUsuarioBD(Usuario u){
         List<Anuncio> anuncios = new ArrayList();

        Connection con = null;
        Statement st = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection(PDatos.baseDatos, PDatos.usuario, PDatos.password);
            st = con.createStatement();


            //aqui comprueba que lo que le llega es una foto o una ruta
            
                rs = st.executeQuery("Select idAnuncio,idCreador,descripcion,fecha,rutaFoto,precio,producto FROM anuncios WHERE idCreador="+u.getId()+"");

                while (rs.next()) {                    
                    Anuncio a = new Anuncio(rs.getInt("idAnuncio"), rs.getInt("idCreador"), rs.getString("descripcion"), rs.getString("rutaFoto"), rs.getString("producto"), rs.getDouble("precio"), rs.getDate("fecha"));                    
                    anuncios.add(a);
                }
           

            

        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                rs.close();
                st.close();
                con.close();
            } catch (SQLException sqlex) {
                System.out.println(sqlex.getMessage());
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
        return anuncios;
        
    
    }
    
    public static void eliminarAnuncioBD(int id){
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection(PDatos.baseDatos, PDatos.usuario, PDatos.password);
            st = con.createStatement();
            
           

            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd H:mm:ss");    
            
            //consulta para modificar foto            
            st.executeUpdate("DELETE FROM anuncios WHERE " + id + "=idAnuncio");
              
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                st.close();
                con.close();
            } catch (SQLException sqlex) {
                System.out.println(sqlex.getMessage());
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
    
    }
    
    public static Anuncio seleccionarAnuncioBD(int id) {
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;
        Anuncio a = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection(PDatos.baseDatos, PDatos.usuario, PDatos.password);
            st = con.createStatement();
            
                
                rs = st.executeQuery("Select idAnuncio,idCreador,descripcion,fecha,rutaFoto,precio,producto FROM anuncios  WHERE idAnuncio= " + id);

                while (rs.next()) {                    
                    
                    a = new Anuncio(rs.getInt("idAnuncio"), rs.getInt("idCreador"), rs.getString("descripcion"), rs.getString("rutaFoto"), rs.getString("producto"), rs.getDouble("precio"), rs.getDate("fecha")); 
                    
                }
            
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                rs.close();
                st.close();
                con.close();
            } catch (SQLException sqlex) {
                System.out.println(sqlex.getMessage());
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
        return a;
    }
    
   }

   



